package org.global.basic;

import org.global.GEntity;
import org.springframework.data.jpa.domain.Specification;

import javax.persistence.EntityManager;
import java.io.Serializable;
import java.util.List;
import java.util.Optional;

public interface CurdServiceOp<ID extends Serializable, T extends GEntity<ID>, P extends ServiceParams<ID, T>> {
    T save(P p);

    T update(P p) throws Exception;

    void updateAll(P p) throws Exception;

    T del(P p);

    List<T> delByIds(List<ID> ids);

    Optional<T> findById(ID id);

    Optional<List<T>> findAll(Specification<T> specification);

    Optional<List<T>> findAll();

    boolean existsById(ID id);

    boolean exists(Specification<T> spec);

    Optional<T> findOne(Specification<T> spec);

    /**
     *
     * @param ids id集合
     * @param idClass id的类型
     * @return 实体结果集合
     */
    Optional<List<T>> findByIds(List<ID> ids, Class<ID> idClass);

    EntityManager entityManger();
}
